이번 단계에서는 쌍곡탄젠트 또는 하이퍼볼릭 탄젠트 라 불리는 $\tanh$ 를 구현한다.
$\tanh(x)$ 함수의 미분은 다음의 Quotient Differentiation Rule 을 이용한다.
이때, $\frac{\partial e^x}{\partial x} = e^x,\frac{\partial e^{-x}}{\partial x} = -e^{-x}$ 임을 이용하면 다음과 같이 미분할 수 있다.
앞서 구한 미분 결과를 바탕으로 Tanh를 구현해보자.
import sys
sys.path.append("..")
import numpy as np
from dezero.core import Function
class Tanh(Function):
def forward(self, x):
y = np.tanh(x)
return y
def backward(self, gy):
y = self.outputs[0]()
gx = gy * (1 - y**2)
return gx
def tanh(x):
return Tanh()(x)
구현된 Tanh를 바탕으로 고차미분 계산그래프를 시각화 해보자. 다음은 반복해서 역전파함으로 써 고차미분을 계산하고 생성된 계산 그래프를 시각화 하는 코드이다.
import numpy as np
from dezero import Variable
from dezero.utils import plot_dot_graph
import dezero.functions as F
x = Variable(np.array(1.0))
y = F.tanh(x)
x.name = 'x'
y.name = 'y'
y.backward(create_graph=True)
# TODO: n=2,3,4 로 바꿔가며 확인해보자.
iters = 5
for i in range(iters):
gx = x.grad
x.cleargrad()
gx.backward(create_graph=True)
gx = x.grad
gx.name = 'gx' + str(iters + 1)
plot_dot_graph(gx, verbose=False, to_file='tanh.png')